package com.算法.软件设计与开发.试题编号_2_1_9_网上训练平台关键算法;


import java.util.Scanner;

public class 任务二_停电停多久问题关键算法 {
    /**
     * Lee 的老家住在工业区，日耗电量非常大。
     * 今年 7 月，传来了不幸的消息，政府要在 7、8 月对该区进行拉闸限电。
     * 政府决定从 7 月 1 日起停电，然后隔一天到 7 月 3 日再停电，
     * 再隔两天到 7 月 6日停电，依次下去，每次都比上一次长一天。
     *
     * Lee 想知道自己到家后到底要经历多少天倒霉的停电。请编写程序帮他算一算。
     * 注意：从键盘输入放假日期、开学日期，日期限定在 7、8 月份，
     * 且开学日期大于放假日期，然后在屏幕上输出停电天数。
     *
     * 提示：可以用数组标记停电的日期。
     */
    public static void main(String[] args) {

        System.out.println("请输入放假日期(格式月、日限定在 7、8 月份):");
        Scanner sc = new Scanner(System.in);
        int month = sc.nextInt();
        int day = sc.nextInt();
        System.out.println("请输入开学日期(格式月、日限定在 7、8 月份):");
        int month1 = sc.nextInt();
        int day1 = sc.nextInt();
        int[] qi = new int[31];
        int[] ba = new int[31];
        qi[0] = 1;
        int sum = 2;
        for (int i = 1; i <= 31; i++) {
            if (qi[i - 1] + sum > 31) {
                break;
            }
            qi[i] = qi[i - 1] + sum;
            sum++;
        }


        int zero = 0;  // 统计0的个数
        for (int i = 0; i < qi.length; i++) {
            if (qi[i] == 0) {
                zero++;
            }
        }
        int j = 0;
        int[] newqi = new int[qi.length - zero];
        for (int i = 0; i < qi.length; i++) {
            if (qi[i] != 0) {
                newqi[j] = qi[i];
                j++;
            }
        }
        System.out.print("七月停电天数：");
        for (int n : newqi) {
            System.out.print(n + " ");
        }

        ba[0] = sum - (31 - newqi[newqi.length - 1]);

        for (int i = 1; i <= 31; i++) {
            if (ba[i - 1] + sum > 31) {
                break;
            }
            ba[i] = ba[i - 1] + sum;
            sum++;
        }

        int zero1 = 0; // 统计0的个数
        for (int i = 0; i < ba.length; i++) {
            if (ba[i] == 0) {
                zero1++;
            }
        }

        int[] newba = new int[ba.length - zero1];
        int k = 0;
        for (int i = 0; i < ba.length; i++) {
            if (ba[i] != 0) {
                newba[k] = ba[i];
                k++;
            }
        }

        System.out.print("八月停电天数：");
        for (int n : newba) {
            System.out.print(n + " ");
        }

        int stop = 0;//停电天数
        if (month == 7) {
            if (month1 == 7) {
                for (int i = day; i <= day1; i++) {
                    for (int z = 0; z < newqi.length; z++) {
                        if (newqi[z] == i) {
                            stop++;
                        }
                    }
                }
            } else {
                for (int i = day; i <= 31; i++) {
                    for (int z = 0; z < newqi.length; z++) {
                        if (newqi[z] == i) {
                            stop++;
                        }
                    }
                }
                for (int i = 1; i <= day1; i++) {
                    for (int z = 0; z < newba.length; z++) {
                        if (newba[z] == i) {
                            stop++;
                        }
                    }
                }


            }
        }else {
            for(int i =day;i<=day1;i++){
                for(int z=0;z<newba.length;z++){
                    if(newba[z]==i){
                        stop++;
                    }
                }
            }
        }
        System.out.println("停电天数为:"+stop);
    }
}
